package com.grupoconstruobras.sigo.general;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.grupoconstruobras.sigo.security.auth.cdi.IPermisoSession;
import com.grupoconstruobras.sigo.security.auth.listener.SecurityListener;
import com.grupoconstruobras.sigo.general.enums.Funcionalidad;
import com.grupoconstruobras.sigo.general.util.CRUDState;

import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.inject.Inject;

public class ConfiguracionSeguridad {
	
	private SecurityListener seguridad;
	
	@Inject
	private IPermisoSession permiso;
	
	
	
	/**
	 * 
	 * @param fc
	 * @param idvista
	 */
	public void cargarConfiguacionSeguridad(FacesContext fc, String idvista, Funcionalidad func){
		
		seguridad = new SecurityListener();
		
		//Primero se consultan los recursos de la vista, si hay alguno marcado como solo lectura, se marcaran todos sus componentes en modo solo lectura sin
		//importar como esten configurados
		
		/*Inicio aplicación de seguridad para componentes que se quieren deshabilitar*/
		List<String> componentesRecurso = permiso.consultarComponentesRecursosVista(idvista, func);
		
		
		if(componentesRecurso != null){
			if(!componentesRecurso.isEmpty()){
				hacerComponenteSoloLectura(componentesRecurso);
			}else{
				List<String> componentes = permiso.consultarComponentesRol(idvista, func);
		
				hacerComponenteSoloLectura(componentes);
			}
		}else{
			List<String> componentes = permiso.consultarComponentesRol(idvista, func);
			hacerComponenteSoloLectura(componentes);
		}
		
		/*Fin aplicación de seguridad para componentes que se quieren deshabilitar*/
		
		/*Inicio aplicación de seguridad para componentes que no se quieren renderizar*/
		
		List<String> componentesRecursoRender = permiso.consultarComponentesRecursosVistaOcultar(idvista, func);
		
		if(componentesRecursoRender != null){
			if(!componentesRecursoRender.isEmpty()){
				ocultarComponentes(componentesRecursoRender);
			}else{
				List<String> componentesRender = permiso.consultarComponentesRolOcultar(idvista, func);
				ocultarComponentes(componentesRender);
			}
		}else{
			List<String> componentesRender = permiso.consultarComponentesRolOcultar(idvista, func);
			ocultarComponentes(componentesRender);
		}
		
		/*Fin aplicación de seguridad para componentes que no se quieren renderizar*/
		
	}


/**
 * 
 * @param componentes
 */
	private void hacerComponenteSoloLectura(List<String> componentes) {
		seguridad.aplicarConfiguracionSeguridadSoloLectura(FacesContext.getCurrentInstance(), componentes);
	}
	
	private void ocultarComponentes(List<String> componentes){
		seguridad.aplicarConfiguracionSeguridaOcultarComponentes(FacesContext.getCurrentInstance(), componentes,false);
	}

	
	public Map<String, String> cargarConfiguracionMenu(FacesContext fc){
		
		seguridad = new SecurityListener();
		List<String> componentes = permiso.consultarVistasUsuario();
		Map<String, String> componentesHabilitados = new HashMap<String, String>(); 
		
		for(String idComp : componentes){
			componentesHabilitados.put(idComp, "S");
		}
		//seguridad.aplicarSeguridadMenu(FacesContext.getCurrentInstance(), componentes);
		return componentesHabilitados;
	}

}
